#include "ListaOrd.h"

ListaOrd::ListaOrd(){
	lista = Lista<Mensaje*>();
}

ListaOrd::ListaOrd(const Lista<Mensaje*>& l){
	lista = l;
}

void ListaOrd::insertar(Mensaje* m){ //Porque no andan el const aca?
	this->lista.AgregarAdelante(m);
}

void ListaOrd::insertarVarios(ListaOrd& l){
	Lista<Mensaje*>::Iterador it1 = lista.CrearIt();
	Lista<Mensaje*>::Iterador it2 = l.lista.CrearIt();
	while (it2.HaySiguiente()){
		if (it1.HaySiguiente() && (it2.Siguiente()->creado.menor(it1.Siguiente()->creado)))
			{
				it1.Avanzar();
			}
		else
			{
				it1.AgregarComoAnterior(it2.Siguiente());
				it2.Avanzar();
			}
	}
}

ListaOrd::ItListaOrd ListaOrd::CrearItListaOrd(){
	return ItListaOrd(lista);
}

ListaOrd::ItListaOrd::ItListaOrd() : it() {}

ListaOrd::ItListaOrd::ItListaOrd(Lista<Mensaje*>& l) : it(l){}

bool ListaOrd::ItListaOrd::HayMas() const{
	return it.hayMas();
}

const Mensaje* ListaOrd::ItListaOrd::Actual() const{
	assert(HayMas());
	return it.actual();
}

void ListaOrd::ItListaOrd::Avanzar(){
	assert(HayMas());
	it.avanzar();
}

ListaOrd::ItListaTemp ListaOrd::CrearItListaTemp(Fecha f){
	return ItListaTemp(lista, f);
}

//ListaOrd::ItListaOrd::ItListaOrd() : it(), fecha( {}

ListaOrd::ItListaTemp::ItListaTemp(Lista<Mensaje*>& l, Fecha f) : it(l), fecha(f){}

bool ListaOrd::ItListaTemp::HayMas() const{
	return (it.hayMas() && ((*it.actual()).creado.mismaSemana(fecha)));
}

const Mensaje* ListaOrd::ItListaTemp::Actual() const{
	assert(HayMas());
	return it.actual();
}

void ListaOrd::ItListaTemp::Avanzar(){
	assert(HayMas());
	it.avanzar();
}

Mensaje* ListaOrd::ItListaOrd::ActualAux(){
	assert(HayMas());
	return it.actual();
}



